#include<stdio.h>
#include<conio.h>
typedef struct node{
    long value,max;
    node *left,*right;
};
long i,n,s1,max,a[10000];
node *head=NULL;
void input(){
    FILE *fp=fopen("DAYCON.INP","r");
    fscanf(fp,"%ld",&n);
    for(i=1;i<=n;i++)fscanf(fp,"%ld",&a[i]);
    fclose(fp);
}
node *newNode(long value,long max){
    node *a=new node;
    (*a).value=value;
    (*a).max=max;
    (*a).left=(*a).right=NULL;
    return a;
}
node *push(long x,node *t){
    if(t==NULL)return newNode(x,s1);
    else if(x>=(*t).value){
        if(s1<(*t).max+1)s1=(*t).max+1;
        if((*t).right==NULL)
            (*t).right=push(x,(*t).right);
        else push(x,(*t).right);
    }else{
        if((*t).left==NULL)
            (*t).left=push(x,(*t).left);
        else push(x,(*t).left);
        if(s1>(*t).max)(*t).max=s1;
    }
    return NULL;
}        
void out(node *a){
    if(a==NULL)return;
    out((*a).left);
    printf("(%ld,%ld)",(*a).value,(*a).max);
    out((*a).right);
}
void process(){
    printf("%d\n",n);
    head=newNode(a[1],1);
    for(i=2;i<=n;i++){
        s1=1;
        printf("Push %2ld : ",a[i]);
        push(a[i],head);
        if(s1>max)max=s1;
        out(head);
        printf("\n");
    }
    printf("%ld",max);
}
int main(){
    input();
    process();
    getch();
    return 0;
}
